import json

from django.http import JsonResponse
from django.utils.deprecation import MiddlewareMixin
from tools.myjwt import mjwt
from tools.myredis import r
import time


class PermitionMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # 1.定义白名单，在登录前需要操作的接口放到白名单中
        wlist = ['/register/', '/login/', '/sendsms/']
        # 获取当前的url
        path = request.path
        print("middleware---------------------------1")
        print(path)
        # 2.如果不在白名单，获取token，验证
        if path not in wlist:
            print("middleware----------------------------2")
            try:
                token = request.headers.get('Authorization')
                data = mjwt.jwt_decode(token)
            except:
                return JsonResponse({"code": 401, "mes": "token不存在或者被修改"})
            # data没问题 ↓
            exp = int(data['exp'])
            now = int(time.time())
            userid = data['user_id']
            request.userid = userid
            # 判断是否过期
            if now > exp:
                return JsonResponse({"code": 401, "mes": "token已经过期不能操作"})
            #是否退出,退出时存token
            value = r.get_str(token)
            if value:
                return JsonResponse({"code": 401, "mes": "用户已经退出，不能操作"})
            # 3.↑↑↑验证是否被修改，是否过期，是否已经退出 （点击退出，把token存入redis, 加一个过期时间），任何一个问题，return 401没有权限操作，通过继续下一步操作
            #验证是否有权限操作接口
            list = r.get_str('user'+str(userid)+'interface')
            if list:
                list = json.loads(list)
                if path not in list:
                    return JsonResponse({"code":401,"mes":"没有操作此接口的权限"})